package com.itheima.myinner.test11;

public class TestSwimming {
    public static void main(String[] args) {
         /*
            匿名内部类的使用场景:
                某个接口或者抽象类的方法使用频次非常低的时候,我们就可以使用匿名内部类
                如果接口或抽象类的方法使用频次很多,这时候建议使用标准实现类方式

            匿名内部类和普通实现类的区别：
                1. 匿名内部类本质上是对象【接口的实现类对象/类的子类对象】，普通类是类
                2. 匿名内部类每创建一次就会产生一个新的.class，普通类定义后只会存在一份.class文件
                3. 匿名内部类中定义特有成员没有意义，因为基于多态语法限制下访问不了，普通类可以
        */
        //1. 匿名内部类调用swim方法  下面的带面就相当于我们省去了SwimmingImpl() s = new SwimmingImpl();然后再用
        //s去调用swim方法重写他
//        new Swimming(){
//            @Override
//            public void swim() {
//                System.out.println("铁汁, 我们去游泳吧");
//            }
//        }.swim();
//
        Swimming s = new Swimming() {
            public void show(){
                System.out.println("我是匿名内部类中的show方法。。。");
            }
            @Override
            public void swim() {
                System.out.println("铁汁, 我们去游泳吧");

            }
        };
        //再用s取消用show和swim方法
        s.swim();
        s.show();

        SwimmingImpl ss = new SwimmingImpl();
        ss.show();
        ss.swim();


    }
}
interface Swimming {
    void swim();
    void show();
}
//定义实现类
class SwimmingImpl implements Swimming{

    public void show(){
        System.out.println("我是实现类中的show方法。。。");
    }

    @Override
    public void swim() {
        System.out.println("老铁,我们去划水吧...");
    }
    SwimmingImpl ss = new SwimmingImpl();
//    ss.swim();

}
